草庐IT

Python float - str - 浮点怪异

全部标签

c++ - C++程序中浮点溢出的诊断

我有一种情况,其中一些数值结果(涉及使用double和float的浮点运算)对于大输入大小变得不正确,但对于小输入大小却不正确。一般来说,我想知道哪些工具可用于诊断数值溢出和有问题的精度损失等情况。换句话说:是否有一个工具提示溢出等问题,就像valgrind提示内存错误一样? 最佳答案 如果启用浮点异常,则FPU可以在溢出时抛出异常。具体如何工作取决于操作系统。例如:在Windows上,您可以使用_control87取消屏蔽_EM_OVERFLOW以便在溢出时获得C++异常。在Linux上,您可以使用feenableexcept在F

c++ - 散列浮点值

最近,我很好奇浮点哈希算法是如何工作的,所以我查看了boost::hash_value的源代码。原来是fairlycomplicated.实际的实现循环遍历基数中的每个数字并累积一个哈希值。与整数散列函数相比,它涉及更多。我的问题是:为什么浮点哈希算法应该更复杂?为什么不直接对浮点值的二进制表示进行散列,就好像它是一个整数一样?喜欢:std::size_thash_value(floatf){returnhash_value(*(reinterpret_cast(&f)));}我意识到float不能保证在所有系统上都与int大小相同,但是可以使用一些模板元程序来处理这种事情推导出与fl

c++ - 浮点,我可以信任多少小于/大于比较?

假设我有两个float,我想比较它们。如果一个大于另一个,程序应该采用一个fork。如果情况正好相反,它应该走另一条路。并且它应该做同样的事情,如果被比较的值在一个仍然应该使它比较真实的方向上被轻轻插入。这是一个很难表达的问题,所以我写了这个来演示它-floata=random();floatb=random();//alwaysreturnsanumber(noinfinityorNaNs)if(a=b){if(!(a>=b-FLOAT_EPISILON))launchTheMissiles();buildOrphanages();}else{launchTheMissiles();

c++ - string.c_str() 是常量吗?

这个问题在这里已经有了答案:CanIgetanon-constCstringbackfromaC++string?(14个回答)关闭5年前。我在一个库中有一个函数,它接收char*并修改数据。我试图给它c_str()但c++文档说它返回一个constchar*。除了新建一个char数组并将其复制到其中之外,我还能做什么? 最佳答案 您可以使用&str[0]或&*str.begin()只要:您使用resize()显式预分配函数所需的所有空间;函数不会尝试超过预先分配的缓冲区大小(您应该传递str.size()作为缓冲区大小的参数);当

c++ - 为什么 c/c++ 浮点类型的命名如此奇怪?

C++提供三种浮点类型:float、double和longdouble。我很少在我的代码中使用float,但是当我这样做时,我总是被诸如之类的无害行上的警告所吸引floatPiForSquares=4.0;问题是文字4.0是double,而不是float-这很烦人。对于整数类型,我们有shortint、int和longint,这很简单。为什么C没有短float、float和长float?“double”到底是从哪里来的?编辑:float类型之间的关系似乎类似于整数。double必须至少与float一样大,longdouble至少与double一样大。没有其他精度/范围保证。

c++ - 获取错误浮点异常: 8

我不知道为什么g++不喜欢我的代码。它在java中运行良好。任何见解将不胜感激。#includeusingnamespacestd;boolisPrime(longnumber);intmain(){constlongnumber=600851475143;longmax=0;for(longi=0;i*i 最佳答案 constlongnumber=600851475143;有溢出,long不能容纳那么大的数字。见thislinkLONG_MAXis2147483647尝试:constunsignedlonglongnumber=6

c++ - C++中的浮点格式

如何在C++中格式化float以输出到四舍五入的两位小数?我对setw不满意和setprecision正如我的编译器告诉我的那样,它们是notdefined.cout总输出:Total:12.3961我希望它是:12.40或12.39如果收集起来工作量太大。 最佳答案 您需要包含并将命名空间范围提供给setwandsetprecision#includestd::setw(2)std::setprecision(5)尝试:cout.precision(5);cout或coutiostream提供了精度功能,但要使用setw,可能需要

c++ - 如果 operator< 适用于浮点类型,为什么我们不能将它用于相等性测试?

正确测试两个float是否相等是很多人(包括我)不完全理解的事情。然而,今天,我想到了一些标准容器如何根据operator来定义相等性。我总是看到人们在平等方面存在问题,但从来没有在其他关系比较方面遇到过问题。甚至还有silentversions可供使用,包括除平等和不平等之外的所有内容。假设operator工作“正常”,不像operator==,为什么我们不能这样做:boolfloateq(floata,floatb){//checkNaNreturn!(a事实上,如here所示,我确实运行了一个额外重载double的测试,它似乎与将它们与operator==进行比较时存在相同的缺陷

c++ - 字符串和 const char* 和 .c_str()?

我遇到了一个奇怪的问题,我想知道它为什么会这样。我有一个类,其中有一个返回std::string的成员函数。我的目标是将这个string转换为constchar*,所以我做了以下constchar*c;c=robot.pose_Str().c_str();//isthissafe??????udp_slave.sendData(c);问题是我在大师方面得到了一个奇怪的角色。但是,如果我执行以下操作constchar*c;std::stringdata(robot.pose_Str());c=data.c_str();udp_slave.sendData(c);我得到了我所期望的。我的问

c++ - C++中是否有浮点文字后缀来使数字 double ?

我目前正在从事一个进行数值计算的C++项目。绝大多数代码使用单精度浮点值,并且可以很好地使用它。因此,我使用编译器标志来使基本的浮点文字单精度而不是double,这是默认的。我发现这使表达式更易于阅读,而且我不必担心在某处忘记“f”。但是,我时不时需要double计算提供的额外精度,我的问题是如何将double文字放入这样的表达式中。到目前为止,我尝试过的每种方法都首先将值存储在单精度变量中,然后将截断的值转换为double值。不是我想要的。下面给出了我目前尝试过的一些方法。#includeintmain(){std::cout(1.0E200))(1.0E200)使用单精度常量运行会